package com.hxit.huaxiamelongarden.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hxit.huaxiamelongarden.domin.dto.LoginDto;
import com.hxit.huaxiamelongarden.domin.dto.UserDto;
import com.hxit.huaxiamelongarden.domin.po.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.BeanUtils;

@Mapper
public interface UserMapper extends BaseMapper<User> {


    // 根据 LoginDto 查询用户，identifier 可以是手机号或学号
    default User selectByLoginDto(@Param("loginDto") LoginDto loginDto) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        // 判断 identifier 是手机号还是学号
        if (loginDto.getIdentifier() != null) {
            // 判断是手机号还是学号（假设手机号是11位数字）
            if (loginDto.getIdentifier().matches("^\\d{11}$")) {
                // 如果是手机号，查询手机号字段
                queryWrapper.eq("phone_number", loginDto.getIdentifier());
            } else {
                // 如果不是手机号，默认按学号查询
                queryWrapper.eq("student_id", loginDto.getIdentifier());
            }
        }
        // 执行查询并返回符合条件的一条记录
        return this.selectOne(queryWrapper);
    }

    // 根据手机号查询用户
    default User getUserByPhoneNumber(String phoneNumber) {
        LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getPhoneNumber,phoneNumber); // 查询手机号
        return this.selectOne(queryWrapper);  // selectOne 返回一个用户
    }

    //添加用户

    @Override
    int insert(User user);

    //根据用户id查询用户
    @Select("SELECT * FROM users WHERE user_id = #{UserId}")
    User selectById(int userId);

    //根据用户id删除用户
    @Delete("DELETE FROM users WHERE user_id = #{UserId}")
    int deleteById(int userId);

    //根据用户id更新用户
    default int updateById(UserDto userDto) {
        LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUserId,userDto.getUserId()); // 查询用户id
        User user=new User();
        BeanUtils.copyProperties(userDto,user); // 将userDto中的属性复制到user中
        return this.update(user,queryWrapper); // 更新用户
    }
}
